One way to protect data is through replication. Data replication can provide protection by creating and maintaining duplicate copies of data such that data loss at one node can be minimized. In a distributed storage system, data often needs to be synchronized between multiple instances. Currently, most methods of data replication focus on the way replication is distributed between all nodes to which data is replicated. Some methods take into account the read access properties of data. For example, replication requests can be performed with higher priority for data which is read accessed with higher frequency. Other methods consider the state of a node. However, existing methods involve drawbacks including frequent replication for data with high write frequency, which increases costs involved with time for replication and bandwidth required for replication. Additional drawbacks exist, including latency of read time on remote nodes, such as for data with pending replication requests.